#include <stdio.h>
#include <error.h>
#include <errno.h>
#include <signal.h>

typedef void (*sighandler_t)(int);

void hander(int signo)
{
    switch (signo)
    {
        case SIGINT:
            printf("catch SIGINT\n");
            break;
        case SIGTSTP:
            printf("catch STGTSTP\n");
            break;
        default:
            printf("catch nokown\n");
    }
}

int main(int argc, char* argv[])
{
    //注册信号处理函数
    sighandler_t oldsignal = signal(SIGINT, hander);
    if(oldsignal == SIG_ERR)
    {
        error(1, errno, "signal SIGINT");
    }
    oldsignal = signal(SIGTSTP, hander);
    if(oldsignal == SIG_ERR)
    {
        error(1, errno, "signal SIGTSTP");
    }
    // 信号 SIGKILL不能被捕获 ，验证就是直接报错
    // oldsignal = signal(SIGKILL, hander);
    // if(oldsignal == SIG_ERR)
    // {
    //     error(1, errno, "signal SIGKILL");
    // }
    while(1);
    return 0;
}